perm filename NPROM.FAI[CMS,LCS]2 blob sn#341636 filedate 1978-03-19 generic text, type T, neo UTF8
00100	;	NEW MONITOR AND BOOTSTRAP PROM.
00200	
00300		.INSERT ASMBL.FAI
00400	   UNDEF←377
00500	
00600	; ZPAGE RAM
00700	
00800	TFLG:	0
00900	VAL:	0
01000	ADR:	0
01100		0
01200	
01300		BLOCK 15	;OLD DDT RAM
01400	
01500	CUR:	0
01600		0
01700	BRCODE:	0
01800	RSCODE:	0
01900	KBCODE:	0
     

00100	;RESET
00200	LOC 177274	;LOC 177000
00300	   DSKSEL←176437;Floppy select
00400	RST:	LDAI	10	;Reset floppy disk.
00500		STA	DSKSEL
00600		LDAI	0
00700		STA	DSKSEL
00800	
00900		LDAI	365	;Restore command
01000		STA	FDSKC
01100	BUSY:	LDA	FDSKC	;Wait until not busy.
01200		LSRA
01300		BCC	BUSY
01400	
01500	   RSTREG←UNDEF	;POWER ON RESET REG
01600	   PORBIT←UNDEF	;POWER ON RESET BIT
01700		LDA	RSTREG	;CHECK FOR POWER ON RESET
01800		ANDI	PORBIT
01900		BNE	MANUAL	;NOT POWER ON
02000	
02100		JSR	RSTAK	;Reset stack and decimal mode
02200	
02300	;Stack and decimal mode reset
02400	   PDP←377	;STACK DEPTH
02500	RSTAK:	LDXI	PDP	;Get stack depth.
02600		TXS
02700		CLD		;CLEAR DECIMAL MODE
02800		RTS
02900	;Reset ram jumps.
03000	JMPSET:	
03100	
03200	;Setup interrupt vectors.
03300	   IVECT←176360 ;Ram interrupt vector table address.
03400		LDXI	17	;Number of vectors * 2
03500	IVSET:	LDAX	IVDEF	;Default vector setup loop
03600		STAX	IVECT
03700		DEX
03800		BPL	IVSET
03900	
04000	   PRIC←176436	;PRI CONTROL REGISTER ADDRESS
04100		LDAI	UNDEF	;SETUP PRI CONTROL REGISTER
04200		STA	PRIC
     

00100	;Enable disk
00200		LDAI	20	;20 = Head unloaded and
00300		STA	DSKSEL	;disk init disabled.
00400	
00500	   FDSKC←176420	;DISK COMMAND REGISTER
00600	   FDSKT←176421	;DISK TRACK REGISTER
00700	   FDSKS←176422	;DISK SECTOR REGISTER
00800	   FDSKD←176423	;DISK DATA REGISTER
00900		LDAI	163	;Read 1 IBM sector (128 bytes)
01000		STA	FDSKC	;from the first sector on the
01100				;first track.
01200	
01300	;SETUP DMA
01400	   FDMAA←176400	;FDSK DMA ADDRESS REGISTER
01500	   FDMAC←176401	;FDSK COUNT REGISTER
01600	   DMACON←176410;DMA COMMAND REGISTER
01700		LDAI	0	;RESET DMA
01800		STA	DMACON
01900		STA	FDMAA	;SETUP DMA ADDRESS
02000		LDAI	2	;1000
02100		STA	FDMAA
02200		LDAI	377	;SETUP DMA COUNT
02300		STA	FDMAC
02400		LDAI	201	;CNT=512-1
02500		STA	FDMAC
02600		LDAI	141	;ENABLE FDSK DMA
     

00100	;START
00200	   BOOTS←1000	;BOOTSTRAP START ADDRESS
00300	DMAINT:
00400	DSKINT:	
00500		JMP	BOOTS	;JUMP TO BOOT START
00600	
00700	;Default interupt vectors.
00800	IVDEF:	IVERR	;Error
00900		PROM
01000		IVERR	;Error
01100		PROM
01200		UNLOAD	;Disable head preload
01300		PROM
01400		MODINT	;TTY default
01500		PROM
01600		DMAINT	;Disk load and boot
01700		PROM
01800		DSKINT	;Disk load and boot
01900		PROM
02000		IVERR	;Error
02100	
     

00100	;MANUAL RESET
00200	MANUAL:	LDAI	20	;Unload disk head.
00300		STA	DSKSEL
00400		JSR	RCDPY	;Reset chr dpy
00500		JSR	RMOD	;Reset BRATE, ACIA, and modem.
00600	
00700	;Reset chr dpy
00800	RCDPY:	LDAI	0	;Reset cursor
00900		STAZ	CUR
01000		LDAI	DPYRAM
01100		STAZ	CUR+1
01200	
01300	   RASTER←171760;RASTER OFFSET
01400		LDAI	14	;SET UP DPY DEFAULTS
01500		STA	RASTER	;SHOULD BE 0,0
01600	   CHRROW←171761;CHR ROW OFFSET
01700		LDAI	377
01800		STA	CHRROW
01900	   DPYC←171764	;VIDIO CONTROL
02000		LDAI	100	;CURSOR ENABLE
02100		STA	DPYC
02200	   VMIX←171765	;VIDIO MIXER
02300		LDAI	1	;NORMAL MIX
02400		STA	VMIX
02500		RTS
02600	
02700	;RESET BRATE AND ACIA DEFAULTS
02800	   RSDEF←25	;ACIA CONTROL DEFAULT
02900	RMOD:	LDAI	15	;Set bit rate to 300
03000		STAZ	BRCODE
03100		LDAI	RSDEF	;SETUP ACIA DEFAULT
03200		STAZ	RSCODE
03300		RTS
03400	
03500	;RESET KEY BOARD DEFAULTS
03600	   KBD←173370	;KB DATA REGISTER
03700	   KBC←173371	;KB CONTROL REGISTER
03800		LDAI	UNDEF	;RESET KB DEFAULT
03900		STAZ	KBCODE
     

00100	;DPY DDT LOOP
00200	PCR:	LDAI	15	;PRINT <cr>.
00300		JSR	PCHR
00400	PLF:	LDAI	12
00500		JSR	PCHR	;PRINT <cr>
00600	GNEXT:	JSR	GCHR	;Wait for next chr
00700		ANDI	177
00800	
00900	ECHO:	JSR	PCHR	;Echo it
01000	
01100		JMP	GNEXT	;Wait for next chr
01200	
     

00100	;PRINT ADDRESS/VAL
00200	PAV:	LDXI	0
00300		LDAI	1	;# OF DIGITS
00400		STAZ	NDIG
00500		STAZ	TFLG	;SET BIT MASK
00600		LDYI	2	;# OF BITS + C
00700		JSR	RLOOP	;PRINT "0" OR "1"
00800		LDAI	5
00900		STAZ	NDIG
01000		LDAI	7
01100		STAZ	TFLG
01200		JSR	CLOOP	;PRINT 5 OCTAL DIGITS
01300		LDAI	"/"
01400		JSR	PCHR	;PRINT "/"
01500		LDAI	1
01600		STAZ	NDIG
01700		LDYI	3
01800		STYZ	TFLG
01900		JSR	DLOOP	;PRINT "0" - "3"
02000		LDAI	2
02100		STAZ	NDIG
02200		LDAI	7
02300		STAZ	TFLG
02400		JSR	CLOOP	;PRINT 2 OCTAL DIGITS
02500		RTS
02600	
02700	CLOOP:	LDYI	3	;FOR 3 BITS PER DIGIT
02800	RLOOP:	ROLZ	VAL	;ROTATE ADDRESS AND VALUE
02900		ROLZ	ADR
03000		ROLZ	ADR+1
03100	DLOOP:	DEY
03200		BNE	RLOOP
03300		LDAZ	VAL	;GET NEXT DIGIT
03400		ANDZ	TFLG
03500		ORAI	60	;CONVERT TO ASCII
03600		JSR	PCHR	;PRINT IT
03700		DECZ	NDIG
03800		BNE	CLOOP	;NEXT DIGIT
03900		RTS
     

00100	;PRINT CHR
00200	PCHR:	
00300		STAIX	CUR	;WRITE CHR INTO CHRDPY MEM
00400	
00500		INCZ	CUR	;INCREMENT CURSOR
00600		LDAZ	CUR
00700		ANDI	77	;CHECK IF OFF RIGHT EDGE
00800		BEQ	CRLF	;CLEAR NEXT LINE
00900	
01000	   CURREG←171762	;CURSOR CONTROL REGISTERS
01100		LDAZ	CUR	;UPDATE CURSOR
01200		STA	CURREG
01300		LDAZ	CUR+1
01400		STA	CURREG+1
01500		RTS
01600	
01700	CRLF:	DECZ	CUR	;FIX CURSOR
01800		LDAZ	CUR
01900		ANDI	300	;<CR>
02000		STAZ	CUR
02100		JMP	LF	;<LF>
02200	
02300	;LINE FEED
02400	LF:	CLC
02500		LDAZ	CUR
02600		ADCI	100	;NEXT LINE
02700		STAZ	CUR
02800		BCC	NOTOFF
02900		INCZ	CUR+1
03000		LDAZ	CUR+1
03100		CMPI	ED	;BOTTOM OF SCREEN
03200		BEQ	GLITCH
03300	
03400	CTEOL:	TYA	;SAVE Y
03500		PHA
03600		LDAZ	CUR
03700		ANDI	77
03800		EORI	77
03900		TAY
04000		LDAI	40	;<space>
04100	CLR:	STAIY	CUR
04200		DEY
04300		BNE	CLR
     

00100	;Paper tape loader
00200	PTLOAD:	
00300	
     

00100	;Prom reset and interupt vectors
00200	   LOC 200266	;LOC 177772
00300	
00400	NMIV:	NMIINT	;Prom Non maskable interupt vector
00500		PROM
00600	
00700	RSTV:	RST	;Prom reset vector
00800		PROM
00900	
01000	   IRQINT←0	;0 For vector enable
01100	IRQV:	IRQINT	;Prom interupt request vector
01200		IRQINT
01300	END